/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gob.cgr.sgrh.ejb.entidad;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author MICROSOF
 */
@Entity
@Table(name = "acta_entrega")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "ActaEntrega.findAll", query = "SELECT a FROM ActaEntrega a"),
    @NamedQuery(name = "ActaEntrega.findByIdActaEntrega", query = "SELECT a FROM ActaEntrega a WHERE a.idActaEntrega = :idActaEntrega"),
    @NamedQuery(name = "ActaEntrega.findByNumeroActa", query = "SELECT a FROM ActaEntrega a WHERE a.numeroActa = :numeroActa"),
    @NamedQuery(name = "ActaEntrega.findByDescripcion", query = "SELECT a FROM ActaEntrega a WHERE a.descripcion = :descripcion"),
    @NamedQuery(name = "ActaEntrega.findByFechaEfectividad", query = "SELECT a FROM ActaEntrega a WHERE a.fechaEfectividad = :fechaEfectividad"),
    @NamedQuery(name = "ActaEntrega.findByNumDocumento", query = "SELECT a FROM ActaEntrega a WHERE a.numDocumento = :numDocumento"),
    @NamedQuery(name = "ActaEntrega.findByFechaReincorp", query = "SELECT a FROM ActaEntrega a WHERE a.fechaReincorp = :fechaReincorp"),
    @NamedQuery(name = "ActaEntrega.listarActasPorPersonalFechas", query = "SELECT a FROM ActaEntrega a WHERE a.fechaRegistro between  :desde and :hasta and (a.idPersonal.idPersonal=:idPersonal or :idPersonal is null) and estado like :estado")})
public class ActaEntrega implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_ACTA_ENTREGA")
    private Integer idActaEntrega;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "NUMERO_ACTA")
    private String numeroActa;
    
    private String descripcion;

    @Temporal(TemporalType.DATE)
	@Column(name="FECHA_REGISTRO")
	private Date fechaRegistro;
    
    
	@Temporal(TemporalType.DATE)
	@Column(name="FECHA_EFECTIVIDAD")
	private Date fechaEfectividad;

	@Temporal(TemporalType.DATE)
	@Column(name="FECHA_REINCORP")
	private Date fechaReincorp;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="FECHA_VB_LOGISTICA")
	private Date fechaVbLogistica;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="FECHA_VB_REEMPLAZO")
	private Date fechaVbReemplazo;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="FECHA_VB_SECRETARIA")
	private Date fechaVbSecretaria;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="FECHA_VB_TI")
	private Date fechaVbTi;

	private String funciones;

	@Column(name="ID_MOTIVO")
	private int idMotivo;

	@JoinColumn(name = "ID_PERSONAL", referencedColumnName = "ID_PERSONAL")
    @ManyToOne(optional = false)
    private Personal idPersonal;

	@Column(name="ID_PERSONAL_REEMPLAZO")
	private int idPersonalReemplazo;

	@Column(name="NUM_DOCUMENTO")
	private String numDocumento;

	@Column(name="OBS_LOGISTICA")
	private String obsLogistica;

	@Column(name="OBS_SECRETARIA")
	private String obsSecretaria;

	@Column(name="OBS_TI")
	private String obsTi;

	@Column(name="OBS_VB_REEMPLAZO")
	private String obsVbReemplazo;

	@Column(name="USER_VB_LOGISTICA")
	private String userVbLogistica;

	@Column(name="USER_VB_SECRETARIA")
	private String userVbSecretaria;

	@Column(name="USER_VB_TI")
	private String userVbTi;
	
	@Column(name="ESTADO")
	private String estado;
	
	@ManyToOne()
    @JoinColumns(value = {@JoinColumn(name = "id_motivo" , referencedColumnName = "id_maestra", insertable=false,updatable=false )})//, @JoinColumn(name = "state_code", referencedColumnName = "iso_code")})
   	private Maestra motivo;
	
	@Transient
	private String estadoDesc;
	
	@Transient
	private boolean tiOk;
	
	@Transient
	private boolean uoOk;
	
	@Transient
	private boolean logOk;
	
	@Transient
	private boolean actaOk;
	
	public ActaEntrega() {
	}

	public int getIdActaEntrega() {
		return this.idActaEntrega;
	}

	public void setIdActaEntrega(int idActaEntrega) {
		this.idActaEntrega = idActaEntrega;
	}

	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Date getFechaRegistro() {
		return fechaRegistro;
	}

	public void setFechaRegistro(Date fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

	public Date getFechaEfectividad() {
		return this.fechaEfectividad;
	}

	public void setFechaEfectividad(Date fechaEfectividad) {
		this.fechaEfectividad = fechaEfectividad;
	}

	public Date getFechaReincorp() {
		return this.fechaReincorp;
	}

	public void setFechaReincorp(Date fechaReincorp) {
		this.fechaReincorp = fechaReincorp;
	}

	public Date getFechaVbLogistica() {
		return this.fechaVbLogistica;
	}

	public void setFechaVbLogistica(Date fechaVbLogistica) {
		this.fechaVbLogistica = fechaVbLogistica;
	}

	public Date getFechaVbReemplazo() {
		return this.fechaVbReemplazo;
	}

	public void setFechaVbReemplazo(Date fechaVbReemplazo) {
		this.fechaVbReemplazo = fechaVbReemplazo;
	}

	public Date getFechaVbSecretaria() {
		return this.fechaVbSecretaria;
	}

	public void setFechaVbSecretaria(Date fechaVbSecretaria) {
		this.fechaVbSecretaria = fechaVbSecretaria;
	}

	public Date getFechaVbTi() {
		return this.fechaVbTi;
	}

	public void setFechaVbTi(Date fechaVbTi) {
		this.fechaVbTi = fechaVbTi;
	}

	public String getFunciones() {
		return this.funciones;
	}

	public void setFunciones(String funciones) {
		this.funciones = funciones;
	}

	public int getIdMotivo() {
		return this.idMotivo;
	}

	public void setIdMotivo(int idMotivo) {
		this.idMotivo = idMotivo;
	}

	

	public int getIdPersonalReemplazo() {
		return this.idPersonalReemplazo;
	}

	public void setIdPersonalReemplazo(int idPersonalReemplazo) {
		this.idPersonalReemplazo = idPersonalReemplazo;
	}

	public String getNumDocumento() {
		return this.numDocumento;
	}

	public void setNumDocumento(String numDocumento) {
		this.numDocumento = numDocumento;
	}

	public String getNumeroActa() {
		return this.numeroActa;
	}

	public void setNumeroActa(String numeroActa) {
		this.numeroActa = numeroActa;
	}

	public String getObsLogistica() {
		return this.obsLogistica;
	}

	public void setObsLogistica(String obsLogistica) {
		this.obsLogistica = obsLogistica;
	}

	public String getObsSecretaria() {
		return this.obsSecretaria;
	}

	public void setObsSecretaria(String obsSecretaria) {
		this.obsSecretaria = obsSecretaria;
	}

	public String getObsTi() {
		return this.obsTi;
	}

	public void setObsTi(String obsTi) {
		this.obsTi = obsTi;
	}

	public String getObsVbReemplazo() {
		return this.obsVbReemplazo;
	}

	public void setObsVbReemplazo(String obsVbReemplazo) {
		this.obsVbReemplazo = obsVbReemplazo;
	}

	public String getUserVbLogistica() {
		return this.userVbLogistica;
	}

	public void setUserVbLogistica(String userVbLogistica) {
		this.userVbLogistica = userVbLogistica;
	}

	public String getUserVbSecretaria() {
		return this.userVbSecretaria;
	}

	public void setUserVbSecretaria(String userVbSecretaria) {
		this.userVbSecretaria = userVbSecretaria;
	}

	public String getUserVbTi() {
		return this.userVbTi;
	}

	public void setUserVbTi(String userVbTi) {
		this.userVbTi = userVbTi;
	}    public Personal getIdPersonal() {
		return idPersonal;
	}

	public void setIdPersonal(Personal idPersonal) {
		this.idPersonal = idPersonal;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	 public String getEstadoDesc() {
		 estadoDesc="EN PROCESO";
		if("P".equals(estado)){
			estadoDesc="EN PROCESO";
		} else if("C".equals(estado)){
			estadoDesc="CONFORME";
		} else
			if("A".equals(estado)){
				estadoDesc="ANULADA";
		} 
		return estadoDesc;
	}

	

	@Transient
	public Maestra getMotivo() {
		return motivo;
	}
	
	
	public boolean isTiOk() {
		tiOk=fechaVbTi!=null?true:false;
		return tiOk;
	}

	public void setTiOk(boolean tiOk) {
		this.tiOk = tiOk;
	}

	public boolean isUoOk() {
		uoOk=fechaVbSecretaria!=null?true:false;
		return uoOk;
	}

	public void setUoOk(boolean uoOk) {
		this.uoOk = uoOk;
	}

	public boolean isLogOk() {
		logOk=fechaVbLogistica!=null?true:false;
		return logOk;
	}

	public void setLogOk(boolean logOk) {
		this.logOk = logOk;
	}

	public boolean isActaOk() {
		actaOk=isLogOk()&&isUoOk()&&isLogOk();
		return actaOk;
	}

	public void setActaOk(boolean actaOk) {
		this.actaOk = actaOk;
	}

	@Transient
	public void String(Maestra motivo) {
		this.motivo = motivo;
		this.idMotivo=motivo.getIdMaestra();
	}

	@Override
    public int hashCode() {
        int hash = 0;
        hash += (idActaEntrega != null ? idActaEntrega.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ActaEntrega)) {
            return false;
        }
        ActaEntrega other = (ActaEntrega) object;
        if ((this.idActaEntrega == null && other.idActaEntrega != null) || (this.idActaEntrega != null && !this.idActaEntrega.equals(other.idActaEntrega))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "gob.cgr.sgrh.ejb.entidad.ActaEntrega[ idActaEntrega=" + idActaEntrega + " ]";
    }
    
}
